# -*- coding:utf-8 -*-
# title           :
# description     :
# author          :Python超人/三月三提供
# date            :2024-08-31
# link            :https://gitcode.net/pythoncr/
# python_version  :3.9
# ==============================================================================
from 神笔码靓.神笔库.元素库 import 路径元素, 可操作元素集合, 元素组
from 神笔码靓.神笔库.定义集 import *
from 神笔码靓.神笔库.通用工具集 import *


class 印章工具集:

    def __init__(self, 高清图=None):
        from 神笔码靓.神笔库 import 神笔绘图板
        self.高清图: 神笔绘图板 = 高清图
        self.dwg = 高清图.dwg

    # region 银杏叶印章
    def _绘制银杏叶(self, 银杏叶描边颜色=颜色.红色, 银杏叶填充颜色=颜色.透明, 银杏叶描边宽度=6):
        银杏路径 = "M 5.0669087,428.9013 C 14.071477,423.23472 41.005234,405.0257 86.797615,358.26391 106.52572,338.11606 109.71379,312.13173 111.90247,296.47118 123.41553,214.26076 41.684824,157.29512 41.005234,70.00776 40.755385,38.047035 51.578857,28.692677 56.01618,25.70448 c 13.112093,-8.844666 31.780833,-3.447921 34.33929,-2.71836 11.52305,3.24804 16.57597,7.970871 23.50582,15.520639 9.22444,-12.272599 21.55701,-22.906185 28.04309,-26.753865 7.87684,-4.7124805 20.13196,-9.7647565 34.47921,-5.2468353 2.8027,1.3863576 10.19816,4.6987483 14.00278,14.1405363 7.71851,17.578106 8.20288,18.459513 13.57059,23.276897 5.04695,3.158095 14.43129,4.117517 33.4798,-6.895841 11.7829,-4.947016 24.13545,-3.957614 31.0113,2.958216 5.53666,5.566642 6.08633,13.541832 6.39614,18.219011 0.70958,10.433707 -2.95821,18.488849 -4.92702,22.156637 5.82648,-1.369173 17.77928,-3.327993 31.51099,0.989404 7.55544,2.378566 16.44009,6.36616 21.63695,16.659952 5.77652,11.433109 2.91824,23.785649 -0.95942,33.060069 -5.56665,13.31196 -14.17146,21.92677 -19.68813,26.58395 6.83588,-4.2874 28.04309,-14.26139 57.10557,-13.78168 25.35735,0.4388 38.73822,8.02149 46.77178,18.21901 3.04191,4.87455 7.17539,12.61116 8.36495,29.04249 0.38445,12.44688 -3.54569,22.32847 -7.90522,30.38167 5.54413,3.93763 5.67132,4.01104 13.81167,11.96278 10.7981,14.03522 9.3519,27.51492 1.4791,37.41744 -5.68657,6.64599 -5.62854,7.08112 -13.29198,14.77109 6.79928,3.80023 10.0873,6.60451 14.35128,13.6443 4.07596,9.53914 4.38929,12.87561 4.84714,19.83551 -0.54809,13.4309 -0.53471,13.8361 -8.43492,27.91316 -7.49354,8.84993 -8.33561,9.68791 -18.63875,16.39012 2.11873,6.52606 7.30559,19.12846 5.37676,33.11003 -0.85948,6.21625 -1.93884,19.52822 -13.32197,28.58276 -21.3871,16.99975 -43.32386,8.15508 -62.21248,-3.06815 -46.61189,-27.71328 -52.94806,-42.4444 -100.67928,-60.10374 -30.90136,-11.43311 -59.83391,-11.7829 -64.0014,-11.81288 -7.87525,-0.05 -58.09496,-5.24684 -74.834862,10.51366 -19.058505,17.93918 -63.881472,57.6852 -80.291576,68.55864 -8.5648338,5.67659 -7.3755511,0.65961 -5.8564672,-0.29981 z"
        return self.高清图.连线(描边颜色=银杏叶描边颜色, 描边宽度=银杏叶描边宽度,
                           填充颜色=银杏叶填充颜色).原生path(银杏路径).缩放(0.5).描边线连接样式(描边线连接样式.圆角连接)

    def _银杏叶获取文字参数(self, 文字位置微调, 文字缩放微调, 文字颜色):
        文字1颜色, 文字2颜色, 文字3颜色, 文字4颜色 = 颜色.红色, 颜色.红色, 颜色.红色, 颜色.红色
        if not isinstance(文字颜色, list):
            文字1颜色, 文字2颜色, 文字3颜色, 文字4颜色 = 文字颜色, 文字颜色, 文字颜色, 文字颜色
        else:
            if len(文字颜色) > 0:
                文字1颜色 = 文字颜色[0]
            if len(文字颜色) > 1:
                文字2颜色 = 文字颜色[1]
            if len(文字颜色) > 2:
                文字3颜色 = 文字颜色[2]
            if len(文字颜色) > 3:
                文字4颜色 = 文字颜色[3]

        if len(文字位置微调) > 0:
            微调1 = 文字位置微调[0]
        else:
            微调1 = {"x": 0, "y": 0}

        if len(文字缩放微调) > 0:
            缩放微调1 = 文字缩放微调[0]
        else:
            缩放微调1 = {"x": 1.0, "y": 1.0}

        if len(文字位置微调) > 1:
            微调2 = 文字位置微调[1]
        else:
            微调2 = {"x": 0, "y": 0}

        if len(文字缩放微调) > 1:
            缩放微调2 = 文字缩放微调[1]
        else:
            缩放微调2 = {"x": 1.0, "y": 1.0}

        if len(文字位置微调) > 2:
            微调3 = 文字位置微调[2]
        else:
            微调3 = {"x": 0, "y": 0}

        if len(文字位置微调) > 3:
            微调4 = 文字位置微调[3]
        else:
            微调4 = {"x": 0, "y": 0}

        if len(文字缩放微调) > 2:
            缩放微调3 = 文字缩放微调[2]
        else:
            缩放微调3 = {"x": 1.0, "y": 1.0}

        if len(文字缩放微调) > 3:
            缩放微调4 = 文字缩放微调[3]
        else:
            缩放微调4 = {"x": 1.0, "y": 1.0}

        return (文字1颜色, 文字2颜色, 文字3颜色, 文字4颜色), (微调1, 微调2, 微调3, 微调4), (缩放微调1, 缩放微调2, 缩放微调3, 缩放微调4)

    def _银杏叶两字印章(self, 文字="刚魏", 字体大小=115, 字体文件="小篆体.ttf", 文字位置微调=[], 文字缩放微调=[],
                 文字颜色=颜色.红色, 银杏叶描边颜色=颜色.红色, 银杏叶填充颜色=颜色.透明, 银杏叶描边宽度=6):
        印章元素列表 = 可操作元素集合(self.高清图)
        self._绘制银杏叶(银杏叶描边颜色, 银杏叶填充颜色, 银杏叶描边宽度).添加到列表(印章元素列表)
        文字1, 文字2 = 文字
        (文字1颜色, 文字2颜色, _, _), (微调1, 微调2, _, _), (缩放微调1, 缩放微调2, _, _) = \
            self._银杏叶获取文字参数(文字位置微调, 文字缩放微调, 文字颜色)

        文字1 = self.文字转路径(x=30 + 微调1["x"], y=-4 + 微调1["y"], 文字=文字1, 字体大小=字体大小, 描边宽度=0,
                         填充颜色=文字1颜色, 字体文件=字体文件).添加到列表(印章元素列表)
        文字1.缩放(缩放微调1["x"], 缩放微调1["y"])

        文字2 = self.文字转路径(x=105 + 微调2["x"], y=57 + 微调2["y"], 文字=文字2, 字体大小=字体大小, 描边宽度=0,
                         填充颜色=文字2颜色, 字体文件=字体文件).添加到列表(印章元素列表)
        文字2.缩放(缩放微调2["x"], 缩放微调2["y"])

        return 印章元素列表.创建组合()

    def _银杏叶三字印章(self, 文字="三月三", 字体大小=105, 字体文件="小篆体.ttf", 文字位置微调=[], 文字缩放微调=[],
                 文字颜色=颜色.红色, 银杏叶描边颜色=颜色.红色, 银杏叶填充颜色=颜色.透明, 银杏叶描边宽度=6):
        印章元素列表 = 可操作元素集合(self.高清图)
        文字1, 文字2, 文字3 = 文字

        self._绘制银杏叶(银杏叶描边颜色, 银杏叶填充颜色, 银杏叶描边宽度).添加到列表(印章元素列表)

        (文字1颜色, 文字2颜色, 文字3颜色, _), (微调1, 微调2, 微调3, _), (缩放微调1, 缩放微调2, 缩放微调3, _) = \
            self._银杏叶获取文字参数(文字位置微调, 文字缩放微调, 文字颜色)

        文字1 = self.高清图.文字转路径(x=26 + 微调1["x"], y=-5 + 微调1["y"], 文字=文字1, 字体大小=字体大小, 描边宽度=0,
                             填充颜色=文字1颜色, 字体文件=字体文件).添加到列表(印章元素列表)
        文字1.缩放(缩放微调1["x"], 缩放微调1["y"])

        文字2 = self.高清图.文字转路径(x=77 + 微调2["x"], y=47 + 微调2["y"], 文字=文字2, 字体大小=字体大小, 描边宽度=0,
                             填充颜色=文字2颜色, 字体文件=字体文件).添加到列表(印章元素列表)
        文字2.缩放(缩放微调2["x"], 缩放微调2["y"])

        文字3 = self.高清图.文字转路径(x=117 + 微调3["x"], y=82 + 微调3["y"], 文字=文字3, 字体大小=字体大小, 描边宽度=0,
                             填充颜色=文字3颜色, 字体文件=字体文件).添加到列表(印章元素列表)
        文字3.缩放(缩放微调3["x"], 缩放微调3["y"])

        return 印章元素列表.创建组合()

    def _银杏叶四字印章(self, 文字="春节快乐", 字体大小=90, 字体文件="小篆体.ttf", 文字位置微调=[], 文字缩放微调=[],
                 文字颜色=颜色.红色, 银杏叶描边颜色=颜色.红色, 银杏叶填充颜色=颜色.透明, 银杏叶描边宽度=6):
        印章元素列表 = 可操作元素集合(self.高清图)
        文字1, 文字2, 文字3, 文字4 = 文字

        self._绘制银杏叶(银杏叶描边颜色, 银杏叶填充颜色, 银杏叶描边宽度).添加到列表(印章元素列表)

        (文字1颜色, 文字2颜色, 文字3颜色, 文字4颜色), (微调1, 微调2, 微调3, 微调4), (缩放微调1, 缩放微调2, 缩放微调3, 缩放微调4) = \
            self._银杏叶获取文字参数(文字位置微调, 文字缩放微调, 文字颜色)

        文字1 = self.高清图.文字转路径(x=26 + 微调1["x"], y=-5 + 微调1["y"], 文字=文字1, 字体大小=字体大小, 描边宽度=0,
                             填充颜色=文字1颜色, 字体文件=字体文件).添加到列表(印章元素列表)
        文字1.缩放(缩放微调1["x"], 缩放微调1["y"])

        文字2 = self.高清图.文字转路径(x=80 + 微调2["x"], y=17 + 微调2["y"], 文字=文字2, 字体大小=字体大小, 描边宽度=0,
                             填充颜色=文字2颜色, 字体文件=字体文件).添加到列表(印章元素列表)
        文字2.缩放(缩放微调2["x"], 缩放微调2["y"])

        文字3 = self.高清图.文字转路径(x=82.5 + 微调3["x"], y=80 + 微调3["y"], 文字=文字3, 字体大小=字体大小, 描边宽度=0,
                             填充颜色=文字3颜色, 字体文件=字体文件).添加到列表(印章元素列表)
        文字3.缩放(缩放微调3["x"], 缩放微调3["y"])

        文字4 = self.高清图.文字转路径(x=130 + 微调4["x"], y=100 + 微调4["y"], 文字=文字4, 字体大小=字体大小, 描边宽度=0,
                             填充颜色=文字4颜色, 字体文件=字体文件).添加到列表(印章元素列表)
        文字4.缩放(缩放微调4["x"], 缩放微调4["y"])

        return 印章元素列表.创建组合()

    def 银杏叶(self, 文字="三月三", 字体大小=90, 字体文件="小篆体.ttf", 文字位置微调=[], 文字缩放微调=[],
            文字颜色=颜色.红色, 银杏叶描边颜色=颜色.红色, 银杏叶填充颜色=颜色.透明, 银杏叶描边宽度=6) -> 元素组:
        if len(文字) == 2:
            return self._银杏叶两字印章(文字=文字, 字体大小=字体大小, 字体文件=字体文件,
                                 文字位置微调=文字位置微调, 文字缩放微调=文字缩放微调,
                                 文字颜色=文字颜色, 银杏叶描边颜色=银杏叶描边颜色,
                                 银杏叶填充颜色=银杏叶填充颜色, 银杏叶描边宽度=银杏叶描边宽度)
        elif len(文字) == 3:
            return self._银杏叶三字印章(文字=文字, 字体大小=字体大小, 字体文件=字体文件,
                                 文字位置微调=文字位置微调, 文字缩放微调=文字缩放微调,
                                 文字颜色=文字颜色, 银杏叶描边颜色=银杏叶描边颜色,
                                 银杏叶填充颜色=银杏叶填充颜色, 银杏叶描边宽度=银杏叶描边宽度)
        elif len(文字) == 4:
            return self._银杏叶四字印章(文字=文字, 字体大小=字体大小, 字体文件=字体文件,
                                 文字位置微调=文字位置微调, 文字缩放微调=文字缩放微调,
                                 文字颜色=文字颜色, 银杏叶描边颜色=银杏叶描边颜色,
                                 银杏叶填充颜色=银杏叶填充颜色, 银杏叶描边宽度=银杏叶描边宽度)

    # endregion

    def 葫芦形(self, x=0, y=0, 宽=50, 描边宽度=2, 填充颜色=None, 描边颜色=None,
            文字=None, 文字位置=None, 文字字符间距=None, 文字大小=None, 字体文件=None) -> 元素组:
        # from 神笔码靓.神笔库 import 创建圆路径
        嘴宽 = 宽 / 10
        葫芦底宽 = 宽 / 8
        嘴倒角半径 = 嘴宽 / 5
        倒角半径1 = 宽 / 4
        葫芦上半径 = 宽 / 2.5
        倒角半径2 = 宽 / 18
        葫芦底半径 = 宽 / 2.04
        描边半宽 = 描边宽度 / 2
        x = x + 描边宽度 + 宽 / 20
        y = y + 描边半宽
        中心X = 宽 / 2 + x
        x0 = 中心X + 嘴宽 / 2 + 嘴倒角半径
        x1, y1 = 65 / 90 * 宽 + x, 20 / 90 * 宽 + 描边半宽
        x2, y2 = 72 / 90 * 宽 + x, 81 / 90 * 宽 + 描边半宽
        x3, y3 = 72 / 90 * 宽 + x, 89 / 90 * 宽 + 描边半宽
        x4, y4 = 中心X, 171 / 90 * 宽 + 描边半宽

        路径点列表 = [("移动", 中心X - 嘴宽 / 2, y),
                 ("水平线", 中心X + 嘴宽 / 2),
                 ("圆弧线", 嘴倒角半径, 1, x0, y + 嘴倒角半径),
                 ("圆弧线", 倒角半径1, 0, x1, y1),
                 ("圆弧线", 葫芦上半径, 1, x2, y2),
                 ("圆弧线", 倒角半径2, 0, x3, y3),
                 ("圆弧线", 葫芦底半径, 1, x4 + 葫芦底宽 / 2, y4),
                 ("圆弧线", 葫芦底半径 * 3, 1, x4 - 葫芦底宽 / 2, y4),
                 ("圆弧线", 葫芦底半径, 1, 中心X - (x3 - 中心X), y3),
                 ("圆弧线", 倒角半径2, 0, 中心X - (x2 - 中心X), y2),
                 ("圆弧线", 葫芦上半径, 1, 中心X - (x1 - 中心X), y1),
                 ("圆弧线", 倒角半径1, 0, 中心X - (x0 - 中心X), y + 嘴倒角半径),
                 ("圆弧线", 嘴倒角半径, 1, 中心X - 嘴宽 / 2, y),
                 ("闭合",)
                 ]

        印章元素集 = 可操作元素集合(self.高清图)

        if 描边颜色 is None:
            描边颜色 = 颜色.红色
        if 填充颜色 is None:
            填充颜色 = 颜色.透明

        self.高清图.连线(路径点列表=路径点列表, 描边宽度=描边宽度, 填充颜色=填充颜色,
                    描边颜色=描边颜色).描边线连接样式(描边线连接样式.圆角连接).添加到列表(印章元素集)

        if 文字:
            if 填充颜色 == 颜色.透明:
                印章颜色 = 描边颜色
            else:
                印章颜色 = 颜色.白色
            self.印章文字(文字=文字, 字体大小=文字大小, 字符间距=文字字符间距, 文字位置=文字位置, 字体文件=字体文件,
                      印章颜色=印章颜色).平移(6, 3).缩放(1.45, 1).添加到列表(印章元素集)

        return 印章元素集.创建组合()

    def 正方形(self, x=0, y=0, 描边宽度=2.5, 填充颜色=None, 描边颜色=None, 圆角半径=2,
            文字=None, 文字位置=None, 文字字符间距=None, 文字大小=None, 字体文件=None) -> 元素组:
        if 文字大小 is None:
            文字大小 = 26
        if len(文字) == 1:
            文字大小 = 文字大小 * 2
        elif len(文字) == 2:
            文字 = 文字 + "印章"
        elif len(文字) == 3:
            文字 = 文字 + "印"

        文字 = 文字[:4]

        印章元素集 = 可操作元素集合(self.高清图)
        if 描边颜色 is None:
            描边颜色 = 颜色.红色
        if 填充颜色 is None:
            填充颜色 = 颜色.透明
        印章边缘线 = self.高清图.画矩形(x=x, y=y, 宽=60, 高=60, 圆角半径=圆角半径,
                             描边宽度=描边宽度, 描边颜色=描边颜色).添加到列表(印章元素集)

        if 文字:
            if 填充颜色 == 颜色.透明:
                印章颜色 = 描边颜色
            else:
                印章颜色 = 颜色.白色
            if len(文字) == 1:
                self.印章文字(文字=文字, 字体大小=文字大小, 字符间距=文字字符间距, 文字位置=文字位置, 字体文件=字体文件,
                          印章颜色=印章颜色).平移(-8, -6).缩放(1.5, 1).添加到列表(印章元素集)
            else:
                self.印章文字(文字=文字[0:2], 字体大小=文字大小, 字符间距=文字字符间距, 文字位置=文字位置, 字体文件=字体文件,
                          印章颜色=印章颜色).平移(28, -5).缩放(1.5, 1).添加到列表(印章元素集)
                self.印章文字(文字=文字[2:4], 字体大小=文字大小, 字符间距=文字字符间距, 文字位置=文字位置, 字体文件=字体文件,
                          印章颜色=印章颜色).平移(0, -5).缩放(1.5, 1).添加到列表(印章元素集)

        return 印章元素集.创建组合()

    def 竖版印章(self, x=0, y=0, 描边宽度=2, 填充颜色=None, 描边颜色=None,
             文字=None, 文字位置=None, 文字字符间距=None, 文字大小=None, 字体文件=None) -> 元素组:
        from 神笔码靓.神笔库 import 版权印章路径
        印章路径 = 版权印章路径()
        路径点列表 = []
        for 命令, *参数 in 印章路径:
            if 命令 == "曲线":
                路径点列表.append((命令, 参数[0] + x, 参数[1] + y, 参数[2] + x, 参数[3] + y, 参数[4] + x, 参数[5] + y))
            elif 命令 in ["移动", "直线"]:
                路径点列表.append((命令, 参数[0] + x, 参数[1] + y))
            else:
                路径点列表.append(tuple([命令] + 参数))
        缩放 = 0.25
        印章元素集 = 可操作元素集合(self.高清图)

        if 描边颜色 is None:
            描边颜色 = 颜色.红色
        if 填充颜色 is None:
            填充颜色 = 颜色.透明

        self.高清图.连线(路径点列表=路径点列表, 描边宽度=描边宽度 / 缩放, 填充颜色=填充颜色,
                    描边颜色=描边颜色).描边线连接样式(描边线连接样式.圆角连接).缩放(缩放).添加到列表(印章元素集)

        if 文字:
            if 填充颜色 == 颜色.透明:
                印章颜色 = 描边颜色
            else:
                印章颜色 = 颜色.白色

            self.印章文字(文字=文字, 字体大小=文字大小, 字符间距=文字字符间距, 文字位置=文字位置, 字体文件=字体文件,
                      印章颜色=印章颜色).平移(6, -3).缩放(1.7, 1).添加到列表(印章元素集)

        return 印章元素集.创建组合()

    def 印章文字(self, 文字, 文字位置=None, 字体大小=None, 字符间距=None, 印章颜色=颜色.红色, 字体文件=None) -> 路径元素:
        if len(文字) == 2:
            if 字符间距 is None:
                字符间距 = 0
            if 文字位置 is None:
                文字位置 = (-3, 3)
            if 字体大小 is None:
                字体大小 = 35
        elif len(文字) == 4:
            if 文字位置 is None:
                文字位置 = (5.5, 1)
            if 字符间距 is None:
                字符间距 = -8
            if 字体大小 is None:
                字体大小 = 25.5
        else:
            pass
        if 字符间距 is None:
            字符间距 = -10
        if 字体大小 is None:
            字体大小 = 33
        if 字体文件 is None:
            字体文件 = "小篆体.ttf"
        if 文字位置 is None:
            x, y = 0, 0
        else:
            x, y = 文字位置
        return self.高清图.文字转路径(x=x, y=y, 文字=文字, 字体大小=字体大小, 字体文件=字体文件,
                              纵向=是, 字符间距=字符间距, 填充颜色=印章颜色, 描边颜色=印章颜色, 描边宽度=0)


if __name__ == '__main__':
    from 神笔码靓.神笔库.神笔绘图板 import 神笔绘图板

    宽, 高 = 纸张大小.A4_横向(1)
    神笔 = 神笔绘图板(作品文件路径="印章工具集.svg", 宽=宽, 高=高)
    # 神笔.贴图(图片文件=资源库目录("图片/葫芦形印章.jpg")).缩放(0.5).平移(-45 * 2, -21 * 2)
    # 神笔.印章.葫芦形(描边宽度=6)
    神笔.印章.葫芦形(文字="神笔", 文字大小=30, 文字位置=(0, 6), 文字字符间距=5, 字体文件="甲骨文.ttf")
    神笔.印章.竖版印章(文字="三月超人").创建组合().平移(70, 0)
    神笔.印章.葫芦形(文字="三月三", 填充颜色=颜色.红色).创建组合().平移(140, 0)
    神笔.印章.竖版印章(文字="三月三", 填充颜色=颜色.红色).创建组合().平移(210, 0)
    神笔.印章.葫芦形(文字="超人", 填充颜色=颜色.红色).创建组合().平移(280, 0)
    神笔.印章.竖版印章(文字="超人", 填充颜色=颜色.红色).创建组合().平移(350, 0)
    神笔.完成()

if __name__ == '__main__':
    # 作品文件路径：保存的 SVG（矢量图）格式的文件路径名称
    # 宽: 神笔绘图板也需要设置页面的宽度
    # 高: 神笔绘图板也需要设置页面的高度
    宽, 高 = 纸张大小.A4_横向(1)
    神笔 = 神笔绘图板(作品文件路径="作者印章.svg", 宽=宽, 高=高)
    神笔.作者葫芦印章()
    神笔.作者竖版印章().平移(70, 0).缩放(3)
    神笔.完成()
